﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades;
using Negocio;
using Mundialeitor.App_Util;

namespace Mundialeitor
{
    public partial class Boleta : PaginaBase
	{
        public EtapaEntity Etapa
        {
            get { return (EtapaEntity)Session["etapa"]; }
            set { Session["etapa"] = value; }
        }

		protected void Page_Load(object sender, EventArgs e)
		{
            if (!IsPostBack)
            {
                ddlEtapa.DataSource = new EtapaRules().SeleccionarTodas();
                ddlEtapa.DataTextField = "Nombre";
                ddlEtapa.DataValueField = "Id";
                ddlEtapa.DataBind();
            }
		}

        protected void btnSeleccionar_Click(object sender, EventArgs e)
        {
            var etapa = new EtapaRules().SeleccionarPorId(int.Parse(ddlEtapa.SelectedValue));
            if (etapa != null)
            {
                if (ValidarVigencia(etapa))
                {
                    Etapa = etapa;
                    gvDetalle.DataSource = etapa.Partidos;
                    gvDetalle.DataBind();
                }
                else
                {
                    Etapa = null;
                    gvDetalle.DataSource = null;
                    gvDetalle.DataBind();
                }
            }
        }        

        protected void gvDetalle_RowCreated(object sender, GridViewRowEventArgs e)
        {            
            Image img;
            img = (Image)e.Row.FindControl("imgBanderaLocal");
            img.ImageUrl = "~/App_Themes/Banderas/" + Etapa.Partidos[e.Row.RowIndex].Local.Abreviatura + ".gif";
            img = (Image)e.Row.FindControl("imgBanderaVisitante");
            img.ImageUrl = "~/App_Themes/Banderas/" + Etapa.Partidos[e.Row.RowIndex].Visitante.Abreviatura + ".gif";
        }

        private bool ValidarVigencia(EtapaEntity obj)
        {
            return obj.FechaInicio <= DateTime.Now;                
        }

        protected void gvBoletas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (!(e.CommandName == "Ver" || e.CommandName == "Eliminar"))
                {
                    return;
                }

                gvBoletas.SelectedIndex = Convert.ToInt32(e.CommandArgument);
                int id = int.Parse(gvBoletas.SelectedDataKey["Id"].ToString());

                BoletaEntity boletaSeleccionada = ObtenerBoleta(id);
                Session["usuarioSeleccionado"] = boletaSeleccionada;

                // Definir el estado del control de usuario
                switch (e.CommandName)
                {
                    case "Ver":
                        CargarBoleta(boletaSeleccionada, true);
                        break;
                    case "Eliminar":
                        CargarBoleta(boletaSeleccionada, false);
                        break;
                }

                //ModoConsulta(false);
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }
        }

        private void CargarBoleta(BoletaEntity boletaSeleccionada, bool p)
        {
            CargarGrillaDetalles(boletaSeleccionada.Detalle);
        }        

        private BoletaEntity ObtenerBoleta(int id)
        {           
            List<BoletaEntity> lista = (List<BoletaEntity>)Session["datosGrilla"];

            var q = (from u in lista where u.Id == id select u).FirstOrDefault();

            return q;
        }

        protected void gvBoletas_RowCreated(object sender, GridViewRowEventArgs e)
        {
            try
            {
                // Asociación de CommandArgument de cada fila con el id de la entidad
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    ImageButton btn;
                    //Boton Ver
                    btn = (ImageButton)e.Row.FindControl("btnVer");
                    btn.CommandArgument = e.Row.RowIndex.ToString();
                    //Boton Eliminar
                    btn = (ImageButton)e.Row.FindControl("btnEliminar");
                    btn.CommandArgument = e.Row.RowIndex.ToString();
                }
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }
        }

        protected void gvBoletas_RowDataBound(object sender, GridViewRowEventArgs e)
        {

        }

        protected void gvBoletas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                gvBoletas.PageIndex = e.NewPageIndex;
                gvBoletas.DataSource = ConsultarBoletas();
                gvBoletas.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }
        }

        private object ConsultarBoletas()
        {
            throw new NotImplementedException();
        }

        private void CargarGrilla(List<BoletaEntity> lista)
        {
            Session["grillaBoletas"] = lista;
            Utilidades.CargarGrilla(gvBoletas, lista);
        }

        private void CargarGrillaDetalles(List<DetalleBoletaEntity> lista)
        {
            Session["grillaDetalle"] = lista;
            Utilidades.CargarGrilla(gvDetalle, lista);
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            try
            {
                int? nro = txtNumero.Text.Trim().Length > 0 ? int.Parse(txtNumero.Text.Trim()) : (int?)null;
                int? userId = ddlEtapa.SelectedIndex > 0 ? int.Parse(ddlEtapa.SelectedValue) : (int?)null;
                DateTime? fechaDesde = txtFechaCreacionDesde.Text.Length > 0 ? DateTime.Parse(txtFechaCreacionDesde.Text) : (DateTime?)null;
                DateTime? fechaHasta = txtFechaCreacionHasta.Text.Length > 0 ? DateTime.Parse(txtFechaCreacionHasta.Text) : (DateTime?)null;
                int? etapaId = ddlEtapa.SelectedValue != null ? int.Parse(ddlEtapa.SelectedValue) : (int?)null;
                var regla = new BoletaRules();
                var lista = regla.SeleccionarBoletaPorFiltro(nro, userId, fechaDesde, fechaHasta, etapaId);
                CargarGrilla(lista);
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }
        }
	}
}
